{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "1f7102c3-21b3-4969-8f9e-e6cd0c9b0dfd",
   "metadata": {},
   "source": []
  },
  {
   "cell_type": "raw",
   "id": "90e12539-7306-42e4-bf23-0d881d5fc287",
   "metadata": {},
   "source": [
    "# 相对论时空，先是有一个三维空间吧……但是这个空间在物体运动时会有一些不同\n",
    "# 光速不变原理在这个空间成立，需要检验一下\n",
    "# 全局一个静止参照系，然后其他系相对于这个参照系进行运动？\n",
    "# 不过所谓“全局”……其实也没有一个绝对的静止参照系，毕竟如果S2在S1系里运动，那么S2眼里自己静止，S1就是运动的\n",
    "# 速度、时间、空间坐标之间的传递关系……也是需要一些本事的\n",
    "# 而且，时间也有相对性，这点未免有些麻烦……总之，一步步来吧"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "87e3af47-bb35-4d3f-95a7-61b5df564d46",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 时空坐标（相对于一个统一的“静止时空”）\n",
    "# 这个应该不至于上极坐标之类的东西吧……有的话之后把代码升级一下就好了\n",
    "class GlobalCoords:\n",
    "    def __init__(self,x:float=0,y:float=0,z:float=0,t:float=0):\n",
    "        self.x=x\n",
    "        self.y=y\n",
    "        self.z=z\n",
    "        self.t=t\n",
    "        # 理论上x y z应该放到一起处理的……不过这里先就这样，后面看看会有什么不同\n",
    "\n",
    "class GlobalVelocity:\n",
    "    def __init__(self,vx:float=0,vy:float=0,vz:float=0):\n",
    "        self.vx=vx\n",
    "        self.vy=vy\n",
    "        self.vz=vz"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "c4c76170-7f98-4f11-ae2b-c607761a1192",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 相对坐标，注意时间也是相对的，这里基本上是某种差值\n",
    "#实话说，如果这个系统足够好的话，可能都不需要全局坐标了（？）但是纯相对的话，还是不好管理（根节点怎么整）\n",
    "class RelativeCoords:\n",
    "    def __init__(self,relative_to:RelativismSpace,dx,dy,dz,dt):\n",
    "        self.relative_to = relative_to\n",
    "        self.dx=dx\n",
    "        self.dy=dy\n",
    "        self.dz=dz\n",
    "        self.dt=dt\n",
    "        #这里的d是变化，与“微分”啥的不太一样了\n",
    "\n",
    "# 相对速度，如果S1与S2全局都是运动的，那么S2相对于S1的速度还不能直接简单地加减\n",
    "# 说起来S0是不是可以整一个……好吧现在如果不指定的话，默认都是0，就充当S0了\n",
    "# 后面还有局部到全局、全局到局部的转换……感觉有点像blender那种意思了\n",
    "class RelativeVelocity:\n",
    "    def __init__(self,relative_to:RelativismSpace,vx,vy,vz):\n",
    "        self.relative_to = relative_to\n",
    "        self.vx=vx\n",
    "        self.vy=vy\n",
    "        self.vz=vz\n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "d40a736f-d3d8-43cb-822b-8ee1eee2d756",
   "metadata": {},
   "outputs": [],
   "source": [
    "class RelativismSpace: #相对论空间\n",
    "    # 理论上可以有个“绝对坐标”，不过其实关键还是在参考系与参考系之间的互动吧\n",
    "    # 一般情况下有这个坐标还是更方便统一管理的……如果真要有一个未知的空间，另外建立一个类吧\n",
    "    # 不过说实话……三维空间这个也需要调用，还是会有点蛋疼的……干脆先自己写一个了\n",
    "    # godot的类型自动限制还是很香的…… 啊搜了一下原来python也可以\n",
    "    def __init__(self,coords:GlobalCoords,velocity: GlobalVelocity):\n",
    "        self.coords = coords\n",
    "        self.velocity = velocity\n",
    "    # 区分coord与space的原因是，space之间有各种各样的互动操作（如速度转换之类），而coords一般就单纯计算吧？\n",
    "    # 比方说，我想表示一个运动中的参考系……好吧现在是先把global给整出来了\n",
    "    #后面应该要整一些相对坐标到绝对坐标、绝对坐标到相对坐标的函数之类了\n",
    "    #不过我有种感觉……好像速度是不是也可以直接与四维时空坐标放到一起管理的\n",
    "\n",
    "    "
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "SageMath 10.5",
   "language": "sage",
   "name": "sagemath"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
